// 加载一个js

export default {
    install(Vue) {
        Object.defineProperty(Vue.prototype.$bui, 'jsLoader', {
            value: function(url, obj) {
                // console.log(obj)
                // obj是加载过后的js特征对象，当不需要再次请求加载是就填入此对象
                if (obj) {
                    // console.log('obj是加载过后的js特征对象，当不需要再次请求加载是就填入此对象')
                    return new Promise((resolve, reject) => {
                        resolve()
                    })
                }else{
                    // 兼容之前的写法，只有一个地址的时候直接加载js
                    if (Object.prototype.toString.apply(url) === '[object String]') {
                        // console.log('兼容之前的写法，只有一个地址的时候直接加载js')
                        return new Promise((resolve, reject) => {
                            let script = document.createElement('script')
                            script.setAttribute('src', url)
                            script.async = true
                            script.onload = () => {
                                // 加载完成
                                resolve()
                            }
                            document.head.appendChild(script)
                        })
                    }

                    // 当存在多个js需要加载时启用Promise.all
                    if (Object.prototype.toString.apply(url) === '[object Array]') {
                        // console.log('当存在多个js需要加载时启用Promise.all')
                        let promises = url.map((path) => {
                            return new Promise((resolve, reject) => {
                                let script = document.createElement('script')
                                script.setAttribute('src', path)
                                script.async = true
                                script.onload = () => {
                                    // 加载完成
                                    resolve()
                                }
                                document.head.appendChild(script)
                            })
                        })

                        return Promise.all(promises)
                    }

                }

            }
        })

    }
}
